/**
 * 角色模块类型定义
 */
import type { PageParams } from './base';

/**
 * 角色相关API命名空间
 */
export namespace RoleApi {
  /**
   * 角色信息
   */
  export interface RoleVO {
    /**
     * 角色ID
     */
    id: number;

    /**
     * 角色名称
     */
    name: string;

    /**
     * 角色编码
     */
    code: string;

    /**
     * 角色描述
     */
    description: string;

    /**
     * 状态（0-禁用，1-启用）
     */
    status: number;

    /**
     * 排序
     */
    sort: number;

    /**
     * 创建时间
     */
    createdTime: string;

    /**
     * 更新时间
     */
    updatedTime: string;
  }

  /**
   * 角色创建参数
   */
  export interface CreateParams {
    /**
     * 角色名称
     */
    name: string;

    /**
     * 角色编码
     */
    code: string;

    /**
     * 角色描述
     */
    description?: string;

    /**
     * 状态（0-禁用，1-启用）
     */
    status: number;

    /**
     * 排序
     */
    sort?: number;
  }

  /**
   * 角色更新参数
   */
  export interface UpdateParams {
    /**
     * 角色ID
     */
    id: number;

    /**
     * 角色名称
     */
    name?: string;

    /**
     * 角色描述
     */
    description?: string;

    /**
     * 状态
     */
    status?: number;

    /**
     * 排序
     */
    sort?: number;
  }

  /**
   * 角色状态更新参数
   */
  export interface StatusUpdateParams {
    /**
     * 角色ID
     */
    roleId: number;

    /**
     * 状态（0-禁用，1-启用）
     */
    status: number;
  }

  /**
   * 角色权限更新参数
   */
  export interface PermissionUpdateParams {
    /**
     * 角色ID
     */
    roleId: number;

    /**
     * 要分配的权限ID数组
     */
    assignPermissionIds: string[];

    /**
     * 要移除的权限ID数组
     */
    removePermissionIds: string[];
  }

  /**
   * 角色删除参数
   */
  export interface DeleteParams {
    /**
     * 角色ID
     */
    roleId: number;
  }

  /**
   * 角色批量删除参数
   */
  export interface BatchDeleteParams {
    /**
     * 角色ID数组
     */
    roleIds: number[];
  }

  /**
   * 角色列表查询参数
   */
  export interface RoleListParams extends PageParams {
    /**
     * 角色名称
     */
    name?: string;

    /**
     * 角色编码
     */
    code?: string;

    /**
     * 状态
     */
    status?: number;
  }
}
